nfs部署和优化

        NFS = network file system

        NFS服务比较常用,用于在网络上共享储存。

服务端配置 NFS

        centos 上使用 NFS 服务,需要安装两个包(nfs-utils 和 rpcbind),不过当使用 yum 安装 nfs-utils 时会把 rpcbind 一起安装上

1
[root@localhost ~]# yum install -y nfs-utils rpcbind

        在以前的 centos 版本中,是需要安装 portmap 包的,从 centos 6 开始,就改为rpcbind了。NFS 配置起来很简单,只需要编辑配置文件 /etc/exports 即可。先创建一个简单的 NFS 服务器。

1
[root@localhost ~]# vim /etc/exports

        写入一下内容:

1
/home/ 192.168.0.0/24(rw,sync,all_squash,anonuid=501,anongid=501)

        这个配置文件就这样简单一行。共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个 IP 也可以是一个 IP 段),第三部分就是小括号里面的,为一些权限选项。

  • rw: 读写;

  • ro: 只读;

  • sync: 同步模式,内存中数据时时写入磁盘;

  • async: 不同步,把内存中数据定期写入磁盘中;

  • no_root_squash: 加上这个选项后,root 用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。但这样不安全,不建议使用。

  • roo_squash: 和上面的选项对应,root 用户对共享目录权限不高,只有普通用户的权限,即限制了 root 。

  • all_squash: 不管使用 NFS 的用户是谁,他的身份都会被限定成一个指定的普通用户身份。

  • anonuid/anongid: 要和root_squash 以及 all_squash一同使用,用于指定使用 NFS 的用户限定后的 uid 和 gid ,前提是本机的 /etc/passwd 存在这个 uid 和 gid 。

        现在分析一下刚才配置的那个 /etc/exports 文件。其中共享的目录为 /home ,信任的主机为 192.168.0.0/24 这个网段,权限为读写,同步,限定所有使用者,并且限定 uid 和 gid 都为501.

        编辑好配置文件后,就该启动服务了 :

1
2
3
4
5
6
7
[root@localhost ~]# service rpcbind start
正在启动 rpcbind: [确定]
[root@localhost ~]# service nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]

        在启动服务以前,需要先启动 rpcbind 服务,以前的 centos 老版本中并不是 rpcbind ,而是叫做 portmap。

客户端上挂载 NFS

        客户端挂载 NFS 以前,需要先查看服务端都共享了哪些目录,需要使用 showmount 命令,但这个命令是 nfs-utils 这个包带的,所以同样需要安装 nfs-utils

1
[root@192 ~]# yum install -y nfs-utils

        现在可以查看服务器端都共享了那些目录了

1
2
3
[root@192 ~]# showmount -e 192.168.0.73
Export list for 192.168.0.73:
/home 192.168.0.0/24

        说明:其中 192.168.0.73 为 NFS 服务端 IP。

        可以看到在服务器端配置的 nfs 共享信息。showmount -e 加 ip 就可以查看 nfs 的共享情况,可以看到 192.168.0.73 的共享目录为 /home ,信任主机为 192.168.0.0/24 这个网段。

        下面的命令是在客户端上挂载 nfs :

1
[root@192 ~]# mount -t nfs -o nfsvers=3 192.168.0.73:/home/ /mnt/

        说明: -o 后面跟挂载选项,如果不加 -o nfsvers=3 则在挂载目录下的文件属主和组都是 nobody,如果指定 nfsers=3 则显示501,所以尽量加上这个选项,避免权限混乱。

        用 df -h 命令可以查看到多出来的一个 /mnt 分区,它就是 NFS 共享的目录了。

命令 exportfs

        还有一个常用的命令就是 exportfs ,它的常用选项为 [-aruv]

  • -a: 全部挂载或者卸载;
  • -r: 重新挂载;
  • -u: 卸载某一个目录;
  • -v: 显示共享的目录

        使用 exportfs 命令,当改变 /etc/exports 配置文件后,不用重启 nfs 服务直接用这个 exportfs 即可。

        下面先更改服务端的配置:

1
[root@192 ~]# vim /etc/exports

        增加一行:

1
/tmp/ 192.168.0.0/24(rw,sync,no_root_squash)

        然后服务端上执行命令:

1
2
3
[root@192 ~]# exportfs -arv
exporting 192.168.0.0/24:/tmp
exporting 192.168.0.0/24:/home

        在之前的命令中用到了 mount 命令来挂载 nfs ,其实 mount 这个 nfs 服务还是有些说法的。首先是用 -t nfs 来指定挂载的类型为 nfs 另外在使用 nfs 时,常用一个选项就是 -o nolock 了,即在挂载 nfs 服务时,不加锁。在客户端上执行:

1
2
[root@192 ~]# mkdir /test
[root@192 ~]# mount -t nfs -o nolock 192.168.0.73:/tmp/ /test/

        还可以把要挂载的 nfs 目录写到 client 上的 /etc/fstab 文件中,挂载时只需要执行 mount -a 即可。在 /etc/fstab 里加一行:

1
2
3
[root@192 ~]# vim /etc/fstab
1192.168.0.73:/tmp/ /test nfs nolock 0 0

        因为刚挂载过,所以先卸载:

1
[root@192 ~]# umount /test/

        然后执行:

1
[root@192 ~]# mount -a

        这样也可以挂载上,而且以后开机会自动挂载。